/** @jsxImportSource @emotion/react */
import * as React from "react";
import {
    Text, useTheme, Button, useToast, TextArea, Table, TableBody, TableRow, CCell,
} from "customize-easy-ui-component";
import {
    InspectRecordLayout, InternalItemProps, useItemInputControl
} from "../../common/base";
import {setupItemAreaRoute} from "./orcIspConfig";
import {useMedia} from "use-media";
import {assertNamesUnique} from "../../common/eHelper";
import {itemA结论,} from "../../mobilecr/editorIN";
import {itemA技术见证, } from "../../amusement/editorJj";
import {EachMeasureCritConfig} from "../../common/msCriteria";
import {EditStorageContext} from "../../StorageContext";
import {config制动距离, itemA制动距离} from "./BrakingDistance";


export const render2轮距={
    view:(orc:any,rep:any)=><>前：{orc?.前轮轮距} &nbsp;后：{orc?.后轮轮距}</>,
    //edit: (inp, setinp)=>{} 编辑器组件的。
};
export const config设备概况 = [
    [['产品名称', '_$设备名称'], ['使用登记证编号', '_$使用证号'], ],
    [['使用地点', '_$设备使用地点'], ['单位内编号','_$单位内部编号'], ],
    [['产品型号', '_$型号'],  ['产品编号', '_$出厂编号'], ],
    [['额定载客人数',{n:'载客人数',t:'n',u:'人'}], ['整机整备质量', '_$自重量','kg'] ],
    //会用： 电机出厂编号 ？？
    [['传动方式', '_$传动方式'], ['发动机（电机）编号', '_$发动机号'] ],
    [['车架编号', '_$底盘编号'], ['发动机（电机）功率', '_$主机功率','kW'] ],
    [['车牌编号','_$上路号牌'], ['制造日期', '_$制造日期'] ],
    [['动力方式','_$动力方式'], ['最大行驶坡度', '_$最大行驶坡度','%'] ],
    //+ _$前轮轮距     前： 后：
    [['最大行驶速度','_$最大行驶速度', 'km/h'], ['轮距（mm）','_$后轮轮距', render2轮距 ] ],
    [['观光列车车厢数','_$车厢数','节'], ['观光列车每节车厢座位数', '_$车厢座位数','个'] ],
    [['观光列车牵引车头座位数','_$车头座位数','个'], ['检验类别', '_$检验类别'] ],
    [['轴距', {n:'轴距',t:'n',u:'mm'}, ], ['现场检验条件',{r:'见附录B'} ] ],
    //(有独立台账的) 舍弃 ：联系人手机？
    [['使用单位联系人', '_$单位联系人'], [' ',{r:''}] ],
    [['联系电话','_$使用单位电话'], ['使用单位邮编','_$使用单位邮编'] ],
    [['下次检验日期','_$新下检日'], ['管理部门类型','_$使管部类型'] ],
    [['使用单位地址', '_$使用单位地址'] ],
    [['分支机构地址', '_$分支机构地址'] ],
    [['产权单位','_$产权单位'], ],
    [['制造单位', '_$制造单位'], ],
    [['改造单位','_$改造单位'], ],
    [['检验意见通知书编号','意通知号'], ],
    [['检验依据',{r:'TSG 81-2022 《场（厂）内专用机动车辆安全技术规程》'}]],
];



/**按照编辑器 recordPrintList 列表的编排顺序来配设的：
 * */
export const EntranceSetup =
React.forwardRef((
    {children, show, alone = true, repId, verId, rep}: InternalItemProps, ref
) => {
    const theme = useTheme();
    const atPrint = useMedia('print');
    const toast = useToast();
    const doCheckNames = React.useCallback((verId: string) => {
        const impressionismAs = setupItemAreaRoute({rep, noDefault: true, theme});
        //特殊的加 {"_Oitems": [{"c":], "_其它0": "×", "_其它0_D":
        const result = assertNamesUnique([{value: rep?.tzFields}, {value: impressionismAs?.Item, type: 'impr'},
            {value: config设备概况, type:'esnt'}, {value:[...itemA结论, ...itemA技术见证] },
            {value: config观测数据, type:'mesB'}, {value: config路线坡度, type:'mesB'}, {value: config行驶速度, type:'mesB'}, {value: config驻车制力, type:'mesB'},
            {value: config制动距离, type:'mesB'}, {value:[...itemA制动距离, ] }, {value: config踏板力, type:'mesB'}, {value: config绝缘阻, type:'mesB'},
            {value:['unq','仪器表','检验条件',  ]} ]);
        toast({title: "完成！", subtitle: result ? "没发现冲突" : "测试开关没开", intent: "success"});
    }, [rep,toast,theme]);
    const {storage, setStorage} =React.useContext(EditStorageContext) as any;
    const getInpFilter = React.useCallback((par: any) => {
        const {_tblFixed, } =par||{};
        return {_tblFixed, };
    }, []);
    const {inp, setInp} = useItemInputControl({ref});
    if (atPrint) return null;
    else return (
        <InspectRecordLayout inp={inp} setInp={setInp} getInpFilter={getInpFilter} show={show}
                             alone={alone} label={'初始化本报告，默认值配置等'}>
            {process.env.REACT_APP_TEST==='true' && <><div>
                <Text variant="h5">构建开发模板时的工具：校验模板的存储name冲突；</Text>
                <Button intent='primary' onPress={() => doCheckNames(verId!)}>校验模板name唯一性</Button>
                <Text variant="h5">设置待测试表格的各列宽度：</Text>
                <TextArea value={storage?._tblFixed || ''} rows={2} onChange={e =>{
                    JSON.parse(e.currentTarget.value??'[]');
                    setStorage({ ...storage, _tblFixed: e.currentTarget.value || undefined}); }}/>
            </div>
            </>
            }
            <hr/>
        </InspectRecordLayout>
    );
});


/**测量表：太多了可拆成两个编辑器； 注意：t: [] 不同于 t: [undefined,undefined,undefined]；
 * 解雇{check: '7.2'}只能放在外部：所以一个序号不能分拆两个的结论独立编辑的栏目；【所以】序号3有两个检验结果这里不支持的！
 * 加字段 sync: 配置的和检验项目列表是有联动。 {check: '6.19', sync:'非封闭'}   save: false,
 * */
export const config观测数据 = [
    [{n: '蓄金电隙', t: ['2.7','(4)','蓄电池金属盖或者非金属盖的金属部件与蓄电池带电部分之间的间隙'], u: 'mm',c: '四', d: '0',cit:'30 ＜ X'}, ],
    [{n: '盖绝隙', t: [undefined,undefined,'若盖板和带电部分被有效绝缘时的间隙'], c: '四', d: '0', cit:'10 ≤ X'},  ],
    [{check: '2.7(4)', }],
    [{n: '胎壁割长', t: ['2.9','(3)', '充气轮胎胎面和胎壁存在破裂和割伤长度'],  c: '四', d: '2', cit:'X ≤ 25'},  ],
    [{check: '2.9(3)'}],
    [{n: '扶手高', t: ['2.13','(3)','扶手距离座椅上表面高度'],  c: '四',d: '0',cit:'180 ≤ X'}, ],
    [{check: '7.28'}],
] as EachMeasureCritConfig[][];

//附录A1:行驶路线坡度检测
export const config路线坡度 = [
    [{n: '路坡仪', t: ['2.15', '(1)',
            <div>
                <Text>车辆的行驶路线中，任意连续20m路段的平均坡度不应当超过最大行驶坡度,其最大行驶坡度应当符合表2的规定要求</Text>
                <Table tight miniw={800}><TableBody>
                    <TableRow><CCell colSpan={3}>表2 观光车辆最大行驶坡度和最大运行速度取值范围</CCell></TableRow>
                    <TableRow><CCell>设备</CCell><CCell>最大行驶坡度 i (%)</CCell><CCell>最大运行速度(km/h)</CCell></TableRow>
                    <TableRow><CCell rowSpan={2}>观光车</CCell><CCell>i&le;10</CCell><CCell>&le;30</CCell></TableRow>
                    <TableRow><CCell>10&lt;i&le;15</CCell><CCell>&le;20</CCell></TableRow>
                    <TableRow><CCell rowSpan={2}>观光列车</CCell><CCell>i&le;4</CCell><CCell>&le;20</CCell></TableRow>
                    <TableRow><CCell>4&lt;i&le;7</CCell><CCell>&le;10</CCell></TableRow>
                </TableBody></Table>
            </div>
        ],x:'a.连续20m路段坡度(用全站仪测量)', u: '%',c: '四', d: '1',
    },],
    [{check: '2.15(1)a',}],
    //这里特别加了 vlNe:4， 1 目的是报告上面：结果栏目的，跨几行画斜杠，计算span。
    [
        {n: '坡长距', t: [undefined, undefined, null],x:'测量路段坡长距离', u: 'm',  c: '四', d: '0',  omit:true, vlNe:4},
        {n: '坡底高', t: [undefined, undefined, undefined],x:'所测坡段底标高（a）', c: '四', d: '0',  omit:true, save:false},
        {n: '坡项高', t: [undefined, undefined, undefined],x:'所测坡段项标高（b）', c: '四', d: '0',  omit:true, save:false},
        {n: '坡高低差', t: [undefined, undefined, undefined],x:'所测坡段高低差(h=a-b)', c: '四', d: '0', omit:true,  save:false,vlNe:1},
        {n: '路段坡度', t: [undefined, undefined, undefined],x:'所测路段坡度', u: '%', c: '四', d: '1',omit:false },
    ],
    [{check: '2.15(1)b',}],
] as EachMeasureCritConfig[][];

//附录A2:最大行驶速度检测； 参数 vlNe:4, :1  在设计区块的第一行和最后一行都配置了。
//[??]有可能需要，自动计算  v=3.6L/t  这个输入框的？ 编辑器关联格的修改 出发自动修改结果框的，保存？并且人工不能同时修订的？。
export const config行驶速度 = [
    [{n: '行距离', t: ['3.1', '(1)',
                <Text>以最高挡位在无载状态下，按 照GB／T 21268-2014中6.7规定的工况、试验方法和要求进行试验，其最大行驶速度应当符合表2的规定要求</Text>
           ],x:'实际运行距离（L)', u: 'm',c: '四', d: '1', omit:true, vlNe:4
        },
        {n: '时间往', t: [undefined, undefined, null],x:'运行所用的时间（往）', u: 's',  c: '四', d: '0',  omit:true, },
        {n: '时间返', t: [undefined, undefined, null],x:'运行所用的时间（返）', c: '四', d: '0',  omit:true, },
        {n: '所用时', t: [undefined, undefined, undefined],x:'平均运行所用时间(t)', c: '四', d: '0', omit:true, vlNe:1},
    ],
     //也可以不用拆分的 : 改成, omit:false,
    [
        {n: '最大速', t: [undefined, undefined, undefined],x:'最大运行速度v=3.6L/t', u: 'km/h', c: '四', d: '1', },
    ],
    [{check: '3.1(1)',}],
] as EachMeasureCritConfig[][];

//附录A3:驻车制动操作力检测；
export const config驻车制力 = [
    [{n: '上坡驻', t: ['3.2.1', '(1)',
            <Text>按照GB／T 21268-2014中6.10.3规定的工况、试验方法和要求进行试验，检查观光车辆以无载状态在行驶路线中较大坡道上驻车，驻车制动性能和操作力应当符合以下要求:
                如手操纵时,应以不大于400N的力; 如脚操纵时,应以不大于500N的力拉紧制动,观光车辆停在规定的坡道上,停稳后观察5min保持不滑移<br/></Text>
        ],x:'上坡驻车制动操作力', u: 'N',c: '四', d: '1',
       },
       {n: '下坡驻', t: [undefined, undefined, null],x:'下坡驻车制动操作力',  c: '四', d: '0', },
    ],
    [{check: '3.2.1(1)',}],
] as EachMeasureCritConfig[][];

//附录A5:行车制动踏板力检测
export const config踏板力 = [
    [{n: '板一往', t: ['3.2.2', '(2)',
                <Text>按照GB／T 21268-2014中 6.10.1和6.10.2规定的工况、试验方法和要求进行试验，行车制动在产生最大制动效能时的踏板力应不大于700N<br/></Text>
            ],x:'第一次行车制动踏板力（往）', u: 'N',c: '四', d: '1',
        },
        {n: '板一返', t: [undefined, undefined, null],x:'第一次行车制动踏板力（返）',  c: '四', d: '0', },
        {n: '板二往', t: [undefined, undefined, null],x:'第二次行车制动踏板力（往）',  c: '四', d: '0', },
        {n: '板二返', t: [undefined, undefined, null],x:'第二次行车制动踏板力（返）',  c: '四', d: '0', },
    ],
    [{check: '3.2.1(1)',}],
] as EachMeasureCritConfig[][];

//【奇怪】3.3(1)允许绝缘电阻最小值 >  ？难道是自动计算的值。
//附录A6:绝缘电阻检测
export const config绝缘阻 = [
    [{n: '蓄绝阻', t: ['3.3', '(1)',
            <Text>蓄电池观光车辆的铅酸蓄电池,其冷态绝缘电阻用500V兆欧表测量应不小于50kΩ<br/></Text>
        ],x:'实测蓄电池的绝缘电阻', u: 'kΩ',c: '四', d: '1',
    },
        {n: '池大压', t: [undefined, undefined, <Text>其他动力蓄电池的绝缘电阻应满足在最大工作电压下﹐直流电路绝缘电阻应不小于100Ω/V,交流电路应不小于500Ω/V。如果直流和交流的B级电压
                电路可导电的连接在一起,则应满足绝缘电阻不小于500Ω/V的要求。若交流电路增加有附加防护,则组合电路至少满足100Ω/V的要求。<br/></Text>
            ],x:'蓄电池的最大工作电压', u: 'V', c: '四', d: '1', },
        {n: '许阻小', t: [undefined, undefined, null],x:'允许绝缘电阻最小值', u: 'MΩ', c: '四', d: '0', save:false},
        {n: '绝缘阻', t: [undefined, undefined, null],x:'实测蓄电池的绝缘电阻',  c: '四', d: '1', },
        {n: '气绝阻', t: [undefined, undefined,
                <Text>电气设备载流部分的冷态绝缘电阻在正常使用温度、湿度小于95%的条件下用500V兆欧表测量应不低于0.5MΩ<br/></Text>
            ],x:'实测蓄电池的绝缘电阻',  c: '四', d: '1', },
    ],
    [{check: '3.3(1)',}],
] as EachMeasureCritConfig[][];

